package com.kai.mqtt.message.service;

import com.kai.mqtt.data.PageResult;
import com.kai.mqtt.data.request.PageSubscribeMessageRequest;
import com.kai.mqtt.data.response.SubscribeMessageResponse;
import com.kai.mqtt.message.SubscribeMessage;

import java.util.List;

/**
 * 订阅消息存储服务
 *
 * @author weijk
 * @since 2024/6/10
 */
public interface ISubscribeMessageService {

    /**
     * 保存消息
     *
     * @param topic            主题
     * @param subscribeMessage 消息
     */
    void put(String topic, SubscribeMessage subscribeMessage);

    /**
     * 根据客户端 id 删除消息
     *
     * @param clientId 客户端 id
     */
    void remove(String clientId);

    /**
     * 根据主题和客户端 id 删除消息
     *
     * @param topic    主题
     * @param clientId 客户端 id
     */
    void remove(String topic, String clientId);

    /**
     * 根据主题匹配消息列表
     *
     * @param topic 主题
     * @return 消息列表
     */
    List<SubscribeMessage> search(String topic);

    /**
     * 获取主题数
     *
     * @return 主题数
     */
    Integer getTopics();

    /**
     * 获取订阅数
     *
     * @return 订阅数
     */
    Integer getSubscribes();

    /**
     * 分页查询订阅消息列表
     *
     * @param request 参数
     * @return 订阅消息列表
     */
    PageResult<SubscribeMessageResponse> pageSubscribe(PageSubscribeMessageRequest request);
}
